/*
 * @Author: Y先森
 * @Date: 2023-04-18 09:54:22
 * @LastEditors: y && 250048395@qq.com
 * @LastEditTime: 2023-04-18 12:12:38
 * @FilePath: \y-website\src\utils\request.js
 */
import axios from 'axios'
import config from './../config'
import { ElMessage } from 'element-plus'
import router from './../router'
// import storage from './storage'

const TOKEN_INVALID = 'Token认证失败，请重新登录'
const NETWORK_ERROR = '网络请求异常，请稍后重试'

// 创建axios实例对象，添加全局配置
const server = axios.create({
  baseURL: config.baseApi,
  timeout: 8000
})

// 请求拦截
// server.interceptors.request.use((req) => {
//   const headers = req.headers
//   const { token } = storage.getItem('userInfo') || {}
//   if (!headers.Authorization) headers.Authorization = 'Bearer ' + token
//   return req
// })

// 响应拦截
server.interceptors.response.use((res) => {
  const { code, data, msg } = res.data
  if (code == 200 || code == '200') {
    return data
  } else if (data == 50001) {
    ElMessage.error(TOKEN_INVALID)
    setTimeout(() => {
      router.push('/login')
    }, 1500)
    return Promise.reject(TOKEN_INVALID)
  } else {
    ElMessage.error(msg || NETWORK_ERROR)
    return Promise.reject(msg || NETWORK_ERROR)
  }
})

/**
 * 请求核心函数
 */
function request(options) {
  options.method = options.method || 'get'
  if (options.method.toLowerCase() === 'get') {
    options.params = options.data
  }
  let isMock = config.mock
  if (typeof options.mock != 'undefined') {
    isMock = options.mock
  }
  if (config.env === 'prod') {
    server.defaults.baseURL = config.baseApi
  } else {
    server.defaults.baseURL = isMock ? config.mockApi : config.baseApi
  }
  return server(options)
}

;['get', 'post', 'put', 'delete', 'patch'].forEach((item) => {
  request[item] = (url, data, options) => {
    return request({
      url,
      data,
      method: item,
      ...options
    })
  }
})

export default request
